package com.mitu.nio;

import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;

/**
 * 说明
 * 1. NIOMappedByteBuffer继承于ByteBuffer
 * 2. NIOMappedByteBuffer直接让文件在内存(堆外的内存)中修改
 * 即操作系统不需要拷贝一次
 */
public class NIOMappedByteBufferTest {
    public static void main(String[] args) throws IOException {
        RandomAccessFile randomAccessFile = new RandomAccessFile("1.txt", "rw");
        //获取对应的文件通道
        FileChannel fileChannel = randomAccessFile.getChannel();
        /**
         * 参数1:读写模式
         * 参数2:可以修改的起始位置
         * 参数3:映射到内存的大小,即将1.txt文件的多少个字节映射到内存中
         *      可以直接修改的范围就是[开始位置,结束位置)
         */
        MappedByteBuffer mappedByteBuffer = fileChannel.map(FileChannel.MapMode.READ_WRITE, 0, 5);
        mappedByteBuffer.put(0, (byte) 'K');
        mappedByteBuffer.put(3, (byte) 'M');
        randomAccessFile.close();
        System.out.println("修改成功");
    }
}
